home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / AIncludes / QuickTimeMusic.a < prev    next >
Encoding:
Text File  |  1997-08-12  |  81.0 KB  |  2,479 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        QuickTimeMusic.a
  3. ;
  4. ;    Contains:    QuickTime Interfaces.
  5. ;
  6. ;    Version:    Technology:    QuickTime 2.5
  7. ;                Release:    Universal Interfaces 3.0.1
  8. ;
  9. ;    Copyright:    © 1990-1997 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__QUICKTIMEMUSIC__') = 'UNDEFINED' THEN
  19. __QUICKTIMEMUSIC__ SET 1
  20.  
  21.     IF &TYPE('__COMPONENTS__') = 'UNDEFINED' THEN
  22.     include 'Components.a'
  23.     ENDIF
  24.     IF &TYPE('__IMAGECOMPRESSION__') = 'UNDEFINED' THEN
  25.     include 'ImageCompression.a'
  26.     ENDIF
  27.     IF &TYPE('__MOVIES__') = 'UNDEFINED' THEN
  28.     include 'Movies.a'
  29.     ENDIF
  30.     IF &TYPE('__QUICKDRAW__') = 'UNDEFINED' THEN
  31.     include 'Quickdraw.a'
  32.     ENDIF
  33.     IF &TYPE('__VIDEO__') = 'UNDEFINED' THEN
  34.     include 'Video.a'
  35.     ENDIF
  36.     IF &TYPE('__SOUND__') = 'UNDEFINED' THEN
  37.     include 'Sound.a'
  38.     ENDIF
  39.  
  40.  
  41. kaiToneDescType                    EQU        'tone'
  42. kaiNoteRequestInfoType            EQU        'ntrq'
  43. kaiKnobListType                    EQU        'knbl'
  44. kaiKeyRangeInfoType                EQU        'sinf'
  45. kaiSampleDescType                EQU        'sdsc'
  46. kaiSampleInfoType                EQU        'smin'
  47. kaiSampleDataType                EQU        'sdat'
  48. kaiInstInfoType                    EQU        'iinf'
  49. kaiPictType                        EQU        'pict'
  50. kaiWriterType                    EQU        '©wrt'
  51. kaiCopyrightType                EQU        '©cpy'
  52. kaiOtherStrType                    EQU        'str '
  53. kaiInstrumentRefType            EQU        'iref'
  54. kaiLibraryInfoType                EQU        'linf'
  55. kaiLibraryDescType                EQU        'ldsc'
  56. InstLibDescRec            RECORD 0
  57. libIDName                 ds        Str31            ; offset: $0 (0)
  58. sizeof                     EQU *                    ; size:   $20 (32)
  59.                         ENDR
  60. InstKnobRec                RECORD 0
  61. number                     ds.l    1                ; offset: $0 (0)
  62. value                     ds.l    1                ; offset: $4 (4)
  63. sizeof                     EQU *                    ; size:   $8 (8)
  64.                         ENDR
  65.  
  66. kInstKnobMissingUnknown            EQU        0
  67. kInstKnobMissingDefault            EQU        $01
  68. InstKnobList            RECORD 0
  69. knobCount                 ds.l    1                ; offset: $0 (0)
  70. knobFlags                 ds.l    1                ; offset: $4 (4)
  71. knob                     ds        InstKnobRec        ; offset: $8 (8) <-- really an array of length one
  72. sizeof                     EQU *                    ; size:   $10 (16)
  73.                         ENDR
  74.  
  75. kMusicLoopTypeNormal            EQU        0
  76. kMusicLoopTypePalindrome        EQU        1                    ; back & forth
  77.  
  78. instSamplePreProcessFlag        EQU        $01
  79.  
  80. InstSampleDescRec        RECORD 0
  81. dataFormat                 ds.l    1                ; offset: $0 (0)
  82. numChannels                 ds.w    1                ; offset: $4 (4)
  83. sampleSize                 ds.w    1                ; offset: $6 (6)
  84. sampleRate                 ds.l    1                ; offset: $8 (8)
  85. sampleDataID             ds.w    1                ; offset: $C (12)
  86. offset                     ds.l    1                ; offset: $E (14)        ;  offset within SampleData - this could be just for internal use
  87. numSamples                 ds.l    1                ; offset: $12 (18)        ;  this could also just be for internal use, we'll see
  88. loopType                 ds.l    1                ; offset: $16 (22)
  89. loopStart                 ds.l    1                ; offset: $1A (26)
  90. loopEnd                     ds.l    1                ; offset: $1E (30)
  91. pitchNormal                 ds.l    1                ; offset: $22 (34)
  92. pitchLow                 ds.l    1                ; offset: $26 (38)
  93. pitchHigh                 ds.l    1                ; offset: $2A (42)
  94. sizeof                     EQU *                    ; size:   $2E (46)
  95.                         ENDR
  96. ; typedef Handle                         AtomicInstrument
  97.  
  98. ; typedef Ptr                             AtomicInstrumentPtr
  99.  
  100.  
  101.  
  102. kMusicComponentType                EQU        'musi'
  103.  
  104. kSoftSynthComponentSubType        EQU        'ss  '
  105. kGMSynthComponentSubType        EQU        'gm  '
  106.  
  107. ; typedef ComponentInstance             MusicComponent
  108.  
  109. ;  MusicSynthesizerFlags
  110.  
  111. kSynthesizerDynamicVoice        EQU        $01                    ; can assign voices on the fly (else, polyphony is very important 
  112. kSynthesizerUsesMIDIPort        EQU        $02                    ; must be patched through MIDI Manager 
  113. kSynthesizerMicrotone            EQU        $04                    ; can play microtonal scales 
  114. kSynthesizerHasSamples            EQU        $08                    ; synthesizer has some use for sampled data 
  115. kSynthesizerMixedDrums            EQU        $10                    ; any part can play drum parts, total = instrument parts 
  116. kSynthesizerSoftware            EQU        $20                    ; implemented in main CPU software == uses cpu cycles 
  117. kSynthesizerHardware            EQU        $40                    ; is a hardware device (such as nubus, or maybe DSP?) 
  118. kSynthesizerDynamicChannel        EQU        $80                    ; can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) 
  119. kSynthesizerHogsSystemChannel    EQU        $0100                ; can be channelwise dynamic, but always responds on its system channel 
  120. kSynthesizerSlowSetPart            EQU        $0400                ; SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes 
  121. kSynthesizerOffline                EQU        $1000                ; can enter an offline synthesis mode 
  122. kSynthesizerGM                    EQU        $4000                ; synth is a GM device 
  123. kSynthesizerSoundLocalization    EQU        $00010000            ; synth is a GM device 
  124. ; * Note that these controller numbers
  125. ; * are _not_ identical to the MIDI controller numbers.
  126. ; * These are _signed_ 8.8 values, and the LSB's are
  127. ; * always sent to a MIDI device. Controllers 32-63 are
  128. ; * reserved (for MIDI, they are LSB's for 0-31, but we
  129. ; * always send both).
  130. ; *
  131. ; * The full range, therefore, is -128.00 to 127.7f.
  132. ; *
  133. ; * _Excepting_ _volume_, all controls default to zero.
  134. ; *
  135. ; * Pitch bend is specified in fractional semitones! No
  136. ; * more "pitch bend range" nonsense. You can bend as far
  137. ; * as you want, any time you want.
  138.  
  139. ; typedef SInt32                         MusicController
  140.  
  141.  
  142. kControllerModulationWheel        EQU        1
  143. kControllerBreath                EQU        2
  144. kControllerFoot                    EQU        4
  145. kControllerPortamentoTime        EQU        5                    ; portamento on/off is omitted, 0 time = 'off' 
  146. kControllerVolume                EQU        7
  147. kControllerBalance                EQU        8
  148. kControllerPan                    EQU        10                    ; 0 - "default", 1 - n: positioned in output 1-n (incl fractions) 
  149. kControllerExpression            EQU        11
  150. kControllerLever1                EQU        16                    ; general purpose controllers 
  151. kControllerLever2                EQU        17                    ; general purpose controllers 
  152. kControllerLever3                EQU        18                    ; general purpose controllers 
  153. kControllerLever4                EQU        19                    ; general purpose controllers 
  154. kControllerLever5                EQU        80                    ; general purpose controllers 
  155. kControllerLever6                EQU        81                    ; general purpose controllers 
  156. kControllerLever7                EQU        82                    ; general purpose controllers 
  157. kControllerLever8                EQU        83                    ; general purpose controllers 
  158. kControllerPitchBend            EQU        32                    ; positive & negative semitones, with 7 bits fraction 
  159. kControllerAfterTouch            EQU        33                    ; aka channel pressure 
  160. kControllerSustain                EQU        64                    ; boolean - positive for on, 0 or negative off 
  161. kControllerSostenuto            EQU        66                    ; boolean 
  162. kControllerSoftPedal            EQU        67                    ; boolean 
  163. kControllerReverb                EQU        91
  164. kControllerTremolo                EQU        92
  165. kControllerChorus                EQU        93
  166. kControllerCeleste                EQU        94
  167. kControllerPhaser                EQU        95
  168. kControllerEditPart                EQU        113                    ; last 16 controllers 113-128 and above are global controllers which respond on part zero 
  169. kControllerMasterTune            EQU        114
  170.  
  171. kControllerMaximum                EQU        $7FFF                ; +01111111.11111111 
  172. kControllerMinimum                EQU        $8000                ; -10000000.00000000 
  173. SynthesizerDescription    RECORD 0
  174. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type (must be same as component subtype) 
  175. name                     ds        Str31            ; offset: $4 (4)        ;  text name of synthesizer type 
  176. flags                     ds.l    1                ; offset: $24 (36)        ;  from the above enum 
  177. voiceCount                 ds.l    1                ; offset: $28 (40)        ;  maximum polyphony 
  178. partCount                 ds.l    1                ; offset: $2C (44)        ;  maximum multi-timbrality (and midi channels) 
  179. instrumentCount             ds.l    1                ; offset: $30 (48)        ;  non gm, built in (rom) instruments only 
  180. modifiableInstrumentCount  ds.l    1                ; offset: $34 (52)        ;  plus n-more are user modifiable 
  181. channelMask                 ds.l    1                ; offset: $38 (56)        ;  (midi device only) which channels device always uses 
  182. drumPartCount             ds.l    1                ; offset: $3C (60)        ;  maximum multi-timbrality of drum parts 
  183. drumCount                 ds.l    1                ; offset: $40 (64)        ;  non gm, built in (rom) drumkits only 
  184. modifiableDrumCount         ds.l    1                ; offset: $44 (68)        ;  plus n-more are user modifiable 
  185. drumChannelMask             ds.l    1                ; offset: $48 (72)        ;  (midi device only) which channels device always uses 
  186. outputCount                 ds.l    1                ; offset: $4C (76)        ;  number of audio outputs (usually two) 
  187. latency                     ds.l    1                ; offset: $50 (80)        ;  response time in µSec 
  188. controllers                 ds.l    4                ; offset: $54 (84)        ;  array of 128 bits 
  189. gmInstruments             ds.l    4                ; offset: $64 (100)        ;  array of 128 bits 
  190. gmDrums                     ds.l    4                ; offset: $74 (116)        ;  array of 128 bits 
  191. sizeof                     EQU *                    ; size:   $84 (132)
  192.                         ENDR
  193.  
  194. kVoiceCountDynamic                EQU        -1                    ; constant to use to specify dynamic voicing 
  195.  
  196. ToneDescription            RECORD 0
  197. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type 
  198. synthesizerName             ds        Str31            ; offset: $4 (4)        ;  name of instantiation of synth 
  199. instrumentName             ds        Str31            ; offset: $24 (36)        ;  preferred name for human use 
  200. instrumentNumber         ds.l    1                ; offset: $44 (68)        ;  inst-number used if synth-name matches 
  201. gmNumber                 ds.l    1                ; offset: $48 (72)        ;  Best matching general MIDI number 
  202. sizeof                     EQU *                    ; size:   $4C (76)
  203.                         ENDR
  204.  
  205. kFirstDrumkit                    EQU        16384                ; (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! 
  206. kLastDrumkit                    EQU        16512
  207. ;  InstrumentMatch
  208.  
  209. kInstrumentMatchSynthesizerType    EQU        1
  210. kInstrumentMatchSynthesizerName    EQU        2
  211. kInstrumentMatchName            EQU        4
  212. kInstrumentMatchNumber            EQU        8
  213. kInstrumentMatchGMNumber        EQU        16
  214. ;  KnobFlags
  215.  
  216. kKnobReadOnly                    EQU        16                    ; knob value cannot be changed by user or with a SetKnob call 
  217. kKnobInterruptUnsafe            EQU        32                    ; only alter this knob from foreground task time (may access toolbox) 
  218. kKnobKeyrangeOverride            EQU        64                    ; knob can be overridden within a single keyrange (software synth only) 
  219. kKnobGroupStart                    EQU        128                    ; knob is first in some logical group of knobs 
  220. kKnobFixedPoint8                EQU        1024
  221. kKnobFixedPoint16                EQU        2048                ; One of these may be used at a time. 
  222. kKnobTypeNumber                    EQU        $00
  223. kKnobTypeGroupName                EQU        $1000                ; "knob" is really a group name for display purposes 
  224. kKnobTypeBoolean                EQU        $2000                ; if range is greater than 1, its a multi-checkbox field 
  225. kKnobTypeNote                    EQU        $3000                ; knob range is equivalent to MIDI keys 
  226. kKnobTypePan                    EQU        $4000                ; range goes left/right (lose this? ) 
  227. kKnobTypeInstrument                EQU        $5000                ; knob value = reference to another instrument number 
  228. kKnobTypeSetting                EQU        $6000                ; knob value is 1 of n different things (eg, fm algorithms) popup menu 
  229. kKnobTypeMilliseconds            EQU        $7000                ; knob is a millisecond time range 
  230. kKnobTypePercentage                EQU        $8000                ; knob range is displayed as a Percentage 
  231. kKnobTypeHertz                    EQU        $9000                ; knob represents frequency 
  232. kKnobTypeButton                    EQU        $A000                ; momentary trigger push button 
  233.  
  234.  
  235. kUnknownKnobValue                EQU        $7FFFFFFF            ; a knob with this value means, we don't know it. 
  236. kDefaultKnobValue                EQU        $7FFFFFFE            ; used to SET a knob to its default value. 
  237. KnobDescription            RECORD 0
  238. name                     ds        Str63            ; offset: $0 (0)
  239. lowValue                 ds.l    1                ; offset: $40 (64)
  240. highValue                 ds.l    1                ; offset: $44 (68)
  241. defaultValue             ds.l    1                ; offset: $48 (72)        ;  a default instrument is made of all default values 
  242. flags                     ds.l    1                ; offset: $4C (76)
  243. knobID                     ds.l    1                ; offset: $50 (80)
  244. sizeof                     EQU *                    ; size:   $54 (84)
  245.                         ENDR
  246. GCInstrumentData        RECORD 0
  247. tone                     ds        ToneDescription ; offset: $0 (0)
  248. knobCount                 ds.l    1                ; offset: $4C (76)
  249. knob                     ds.l    1                ; offset: $50 (80) <-- really an array of length one
  250. sizeof                     EQU *                    ; size:   $54 (84)
  251.                         ENDR
  252. ; typedef struct GCInstrumentData *        GCInstrumentDataPtr
  253.  
  254. ; typedef GCInstrumentDataPtr *            GCInstrumentDataHandle
  255.  
  256. InstrumentAboutInfo        RECORD 0
  257. p                         ds.l    1                ; offset: $0 (0)
  258. author                     ds        Str255            ; offset: $4 (4)
  259. copyright                 ds        Str255            ; offset: $104 (260)
  260. other                     ds        Str255            ; offset: $204 (516)
  261. sizeof                     EQU *                    ; size:   $304 (772)
  262.                         ENDR
  263.  
  264. kMusicPacketPortLost            EQU        1                    ; received when application loses the default input port 
  265. kMusicPacketPortFound            EQU        2                    ; received when application gets it back out from under someone else's claim 
  266. kMusicPacketTimeGap                EQU        3                    ; data[0] = number of milliseconds to keep the MIDI line silent 
  267. MusicMIDIPacket            RECORD 0
  268. length                     ds.w    1                ; offset: $0 (0)
  269. reserved                 ds.l    1                ; offset: $2 (2)        ;  if length zero, then reserved = above enum 
  270. data                     ds.b    249                ; offset: $6 (6)
  271.                          ORG 256
  272. sizeof                     EQU *                    ; size:   $100 (256)
  273.                         ENDR
  274.  
  275.  
  276.  
  277. notImplementedMusicErr            EQU        $8000F7E9
  278. cantSendToSynthesizerErr        EQU        $8000F7E8
  279. cantReceiveFromSynthesizerErr    EQU        $8000F7E7
  280. illegalVoiceAllocationErr        EQU        $8000F7E6
  281. illegalPartErr                    EQU        $8000F7E5
  282. illegalChannelErr                EQU        $8000F7E4
  283. illegalKnobErr                    EQU        $8000F7E3
  284. illegalKnobValueErr                EQU        $8000F7E2
  285. illegalInstrumentErr            EQU        $8000F7E1
  286. illegalControllerErr            EQU        $8000F7E0
  287. midiManagerAbsentErr            EQU        $8000F7DF
  288. synthesizerNotRespondingErr        EQU        $8000F7DE
  289. synthesizerErr                    EQU        $8000F7DD
  290. illegalNoteChannelErr            EQU        $8000F7DC
  291. noteChannelNotAllocatedErr        EQU        $8000F7DB
  292. tunePlayerFullErr                EQU        $8000F7DA
  293. tuneParseErr                    EQU        $8000F7D9
  294.  
  295. kGetAtomicInstNoExpandedSamples    EQU        $01
  296. kGetAtomicInstNoOriginalSamples    EQU        $02
  297. kGetAtomicInstNoSamples            EQU        $03
  298. kGetAtomicInstNoKnobList        EQU        $04
  299. kGetAtomicInstNoInstrumentInfo    EQU        $08
  300. kGetAtomicInstOriginalKnobList    EQU        $10
  301. kGetAtomicInstAllKnobs            EQU        $20                    ; return even those that are set to default
  302.  
  303. ;   For non-gm instruments, instrument number of tone description == 0
  304. ;   If you want to speed up while running, slam the inst num with what Get instrument number returns
  305. ;   All missing knobs are slammed to the default value
  306.  
  307.  
  308.  
  309. kSetAtomicInstKeepOriginalInstrument EQU $01
  310. kSetAtomicInstShareAcrossParts    EQU        $02                    ; inst disappears when app goes away
  311. kSetAtomicInstCallerTosses        EQU        $04                    ; the caller isn't keeping a copy around (for NASetAtomicInstrument)
  312. kSetAtomicInstCallerGuarantees    EQU        $08                    ; the caller guarantees a copy is around
  313. kSetAtomicInstInterruptSafe        EQU        $10                    ; dont move memory at this time (but process at next task time)
  314. kSetAtomicInstDontPreprocess    EQU        $80                    ; perform no further preprocessing because either 1)you know the instrument is digitally clean, or 2) you got it from a GetPartAtomic
  315.  
  316. kInstrumentNamesModifiable        EQU        1
  317. kInstrumentNamesBoth            EQU        2
  318. ; * Structures specific to the GenericMusicComponent
  319.  
  320.  
  321.  
  322. kGenericMusicComponentSubtype    EQU        'gene'
  323. GenericKnobDescription    RECORD 0
  324. kd                         ds        KnobDescription ; offset: $0 (0)
  325. hw1                         ds.l    1                ; offset: $54 (84)        ;  driver defined 
  326. hw2                         ds.l    1                ; offset: $58 (88)        ;  driver defined 
  327. hw3                         ds.l    1                ; offset: $5C (92)        ;  driver defined 
  328. settingsID                 ds.l    1                ; offset: $60 (96)        ;  resource ID list for boolean and popup names 
  329. sizeof                     EQU *                    ; size:   $64 (100)
  330.                         ENDR
  331. GenericKnobDescriptionList RECORD 0
  332. knobCount                 ds.l    1                ; offset: $0 (0)
  333. knob                     ds        GenericKnobDescription ; offset: $4 (4) <-- really an array of length one
  334. sizeof                     EQU *                    ; size:   $68 (104)
  335.                         ENDR
  336. ; typedef struct GenericKnobDescriptionList * GenericKnobDescriptionListPtr
  337.  
  338. ; typedef GenericKnobDescriptionListPtr * GenericKnobDescriptionListHandle
  339.  
  340. ;  knobTypes for MusicDerivedSetKnob 
  341.  
  342. kGenericMusicKnob                EQU        1
  343. kGenericMusicInstrumentKnob        EQU        2
  344. kGenericMusicDrumKnob            EQU        3
  345. kGenericMusicGlobalController    EQU        4
  346.  
  347.  
  348.  
  349. kGenericMusicResFirst            EQU        0
  350. kGenericMusicResMiscStringList    EQU        1                    ; STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother 
  351. kGenericMusicResMiscLongList    EQU        2                    ; Long various params, see list below 
  352. kGenericMusicResInstrumentList    EQU        3                    ; NmLs of names and shorts, categories prefixed by '••' 
  353. kGenericMusicResDrumList        EQU        4                    ; NmLs of names and shorts 
  354. kGenericMusicResInstrumentKnobDescriptionList EQU 5            ; Knob 
  355. kGenericMusicResDrumKnobDescriptionList EQU 6                ; Knob 
  356. kGenericMusicResKnobDescriptionList EQU    7                    ; Knob 
  357. kGenericMusicResBitsLongList    EQU        8                    ; Long back to back bitmaps of controllers, gminstruments, and drums 
  358. kGenericMusicResModifiableInstrumentHW EQU 9                ; Shrt same as the hw shorts trailing the instrument names, a shortlist 
  359. kGenericMusicResGMTranslation    EQU        10                    ; Long 128 long entries, 1 for each gm inst, of local instrument numbers 1-n (not hw numbers) 
  360. kGenericMusicResROMInstrumentData EQU    11                    ; knob lists for ROM instruments, so the knob values may be known 
  361. kGenericMusicResAboutPICT        EQU        12                    ; picture for aboutlist. must be present for GetAbout call to work 
  362. kGenericMusicResLast            EQU        13
  363. ;  elements of the misc long list 
  364.  
  365. kGenericMusicMiscLongFirst        EQU        0
  366. kGenericMusicMiscLongVoiceCount    EQU        1
  367. kGenericMusicMiscLongPartCount    EQU        2
  368. kGenericMusicMiscLongModifiableInstrumentCount EQU 3
  369. kGenericMusicMiscLongChannelMask EQU    4
  370. kGenericMusicMiscLongDrumPartCount EQU    5
  371. kGenericMusicMiscLongModifiableDrumCount EQU 6
  372. kGenericMusicMiscLongDrumChannelMask EQU 7
  373. kGenericMusicMiscLongOutputCount EQU    8
  374. kGenericMusicMiscLongLatency    EQU        9
  375. kGenericMusicMiscLongFlags        EQU        10
  376. kGenericMusicMiscLongFirstGMHW    EQU        11                    ; number to add to locate GM main instruments 
  377. kGenericMusicMiscLongFirstGMDrumHW EQU    12                    ; number to add to locate GM drumkits 
  378. kGenericMusicMiscLongFirstUserHW EQU    13                    ; First hw number of user instruments (presumed sequential) 
  379. kGenericMusicMiscLongLast        EQU        14
  380. GCPart                    RECORD 0
  381. hwInstrumentNumber         ds.l    1                ; offset: $0 (0)        ;  internal number of recalled instrument 
  382. controller                 ds.w    128                ; offset: $4 (4)        ;  current values for all controllers 
  383. volume                     ds.l    1                ; offset: $104 (260)    ;  ctrl 7 is special case 
  384. polyphony                 ds.l    1                ; offset: $108 (264)
  385. midiChannel                 ds.l    1                ; offset: $10C (268)    ;  1-16 if in use 
  386. id                         ds        GCInstrumentData ; offset: $110 (272)    ;  ToneDescription & knoblist, uncertain length 
  387. sizeof                     EQU *                    ; size:   $164 (356)
  388.                         ENDR
  389. ; * Calls specific to the GenericMusicComponent
  390.  
  391.  
  392. kMusicGenericRange                EQU        $0100
  393. kMusicDerivedRange                EQU        $0200
  394. ; * Flags in GenericMusicConfigure call
  395.  
  396.  
  397. kGenericMusicDoMIDI                EQU        $01                    ; implement normal MIDI messages for note, controllers, and program changes 0-127 
  398. kGenericMusicBank0                EQU        $02                    ; implement instrument bank changes on controller 0 
  399. kGenericMusicBank32                EQU        $04                    ; implement instrument bank changes on controller 32 
  400. kGenericMusicErsatzMIDI            EQU        $08                    ; construct MIDI packets, but send them to the derived component 
  401. kGenericMusicCallKnobs            EQU        $10                    ; call the derived component with special knob format call 
  402. kGenericMusicCallParts            EQU        $20                    ; call the derived component with special part format call 
  403. kGenericMusicCallInstrument        EQU        $40                    ; call MusicDerivedSetInstrument for MusicSetInstrument calls 
  404. kGenericMusicCallNumber            EQU        $80                    ; call MusicDerivedSetPartInstrumentNumber for MusicSetPartInstrumentNumber calls, & don't send any C0 or bank stuff 
  405. kGenericMusicCallROMInstrument    EQU        $0100                ; call MusicSetInstrument for MusicSetPartInstrumentNumber for "ROM" instruments, passing params from the ROMi resource 
  406. kGenericMusicAllDefaults        EQU        $0200                ; indicates that when a new instrument is recalled, all knobs are reset to DEFAULT settings. True for GS modules 
  407.  
  408.  
  409.  
  410.  
  411. OfflineSampleType        RECORD 0
  412. numChannels                 ds.l    1                ; offset: $0 (0)        ; number of channels,  ie mono = 1
  413. sampleRate                 ds.l    1                ; offset: $4 (4)        ; sample rate in Apples Fixed point representation
  414. sampleSize                 ds.w    1                ; offset: $8 (8)        ; number of bits in sample
  415. sizeof                     EQU *                    ; size:   $A (10)
  416.                         ENDR
  417. InstrumentInfoRecord    RECORD 0
  418. instrumentNumber         ds.l    1                ; offset: $0 (0)        ;  instrument number (if 0, name is a catagory)
  419. flags                     ds.l    1                ; offset: $4 (4)        ;  show in picker, etc.
  420. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  421. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  422. sizeof                     EQU *                    ; size:   $10 (16)
  423.                         ENDR
  424. InstrumentInfoList        RECORD 0
  425. recordCount                 ds.l    1                ; offset: $0 (0)
  426. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  427. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itxt/name atoms for instruments
  428. info                     ds        InstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  429. sizeof                     EQU *                    ; size:   $1C (28)
  430.                         ENDR
  431. ; typedef struct InstrumentInfoList *    InstrumentInfoListPtr
  432.  
  433. ; typedef InstrumentInfoListPtr *        InstrumentInfoListHandle
  434.  
  435. ;
  436. ; pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  437. ;
  438.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  439.         Macro
  440.         _MusicGetDescription
  441.             move.l              #$00040001,-(sp)
  442.             moveq               #0,D0
  443.             dc.w                $A82A
  444.         EndM
  445.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  446.         IMPORT_CFM_FUNCTION MusicGetDescription
  447.     ENDIF
  448.  
  449. ;
  450. ; pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  451. ;
  452.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  453.         Macro
  454.         _MusicGetPart
  455.             move.l              #$000C0002,-(sp)
  456.             moveq               #0,D0
  457.             dc.w                $A82A
  458.         EndM
  459.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  460.         IMPORT_CFM_FUNCTION MusicGetPart
  461.     ENDIF
  462.  
  463. ;
  464. ; pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  465. ;
  466.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  467.         Macro
  468.         _MusicSetPart
  469.             move.l              #$000C0003,-(sp)
  470.             moveq               #0,D0
  471.             dc.w                $A82A
  472.         EndM
  473.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  474.         IMPORT_CFM_FUNCTION MusicSetPart
  475.     ENDIF
  476.  
  477. ;
  478. ; pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  479. ;
  480.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  481.         Macro
  482.         _MusicSetPartInstrumentNumber
  483.             move.l              #$00080004,-(sp)
  484.             moveq               #0,D0
  485.             dc.w                $A82A
  486.         EndM
  487.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  488.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumber
  489.     ENDIF
  490.  
  491.  
  492. ;
  493. ; pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  494. ;
  495.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  496.         Macro
  497.         _MusicGetPartInstrumentNumber
  498.             move.l              #$00040005,-(sp)
  499.             moveq               #0,D0
  500.             dc.w                $A82A
  501.         EndM
  502.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  503.         IMPORT_CFM_FUNCTION MusicGetPartInstrumentNumber
  504.     ENDIF
  505.  
  506. ;
  507. ; pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  508. ;
  509.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  510.         Macro
  511.         _MusicStorePartInstrument
  512.             move.l              #$00080006,-(sp)
  513.             moveq               #0,D0
  514.             dc.w                $A82A
  515.         EndM
  516.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  517.         IMPORT_CFM_FUNCTION MusicStorePartInstrument
  518.     ENDIF
  519.  
  520.  
  521. ;
  522. ; pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  523. ;
  524.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  525.         Macro
  526.         _MusicGetPartAtomicInstrument
  527.             move.l              #$000C0009,-(sp)
  528.             moveq               #0,D0
  529.             dc.w                $A82A
  530.         EndM
  531.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  532.         IMPORT_CFM_FUNCTION MusicGetPartAtomicInstrument
  533.     ENDIF
  534.  
  535. ;
  536. ; pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  537. ;
  538.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  539.         Macro
  540.         _MusicSetPartAtomicInstrument
  541.             move.l              #$000C000A,-(sp)
  542.             moveq               #0,D0
  543.             dc.w                $A82A
  544.         EndM
  545.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  546.         IMPORT_CFM_FUNCTION MusicSetPartAtomicInstrument
  547.     ENDIF
  548.  
  549.  
  550. ;  Obsolete calls
  551. ;
  552. ; pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  553. ;
  554.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  555.         Macro
  556.         _MusicGetInstrumentKnobDescriptionObsolete
  557.             move.l              #$0008000D,-(sp)
  558.             moveq               #0,D0
  559.             dc.w                $A82A
  560.         EndM
  561.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  562.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescriptionObsolete
  563.     ENDIF
  564.  
  565. ;
  566. ; pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  567. ;
  568.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  569.         Macro
  570.         _MusicGetDrumKnobDescriptionObsolete
  571.             move.l              #$0008000E,-(sp)
  572.             moveq               #0,D0
  573.             dc.w                $A82A
  574.         EndM
  575.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  576.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescriptionObsolete
  577.     ENDIF
  578.  
  579. ;
  580. ; pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  581. ;
  582.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  583.         Macro
  584.         _MusicGetKnobDescriptionObsolete
  585.             move.l              #$0008000F,-(sp)
  586.             moveq               #0,D0
  587.             dc.w                $A82A
  588.         EndM
  589.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  590.         IMPORT_CFM_FUNCTION MusicGetKnobDescriptionObsolete
  591.     ENDIF
  592.  
  593. ;
  594. ; pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  595. ;
  596.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  597.         Macro
  598.         _MusicGetPartKnob
  599.             move.l              #$00080010,-(sp)
  600.             moveq               #0,D0
  601.             dc.w                $A82A
  602.         EndM
  603.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  604.         IMPORT_CFM_FUNCTION MusicGetPartKnob
  605.     ENDIF
  606.  
  607. ;
  608. ; pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  609. ;
  610.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  611.         Macro
  612.         _MusicSetPartKnob
  613.             move.l              #$000C0011,-(sp)
  614.             moveq               #0,D0
  615.             dc.w                $A82A
  616.         EndM
  617.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  618.         IMPORT_CFM_FUNCTION MusicSetPartKnob
  619.     ENDIF
  620.  
  621. ;
  622. ; pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  623. ;
  624.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  625.         Macro
  626.         _MusicGetKnob
  627.             move.l              #$00040012,-(sp)
  628.             moveq               #0,D0
  629.             dc.w                $A82A
  630.         EndM
  631.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  632.         IMPORT_CFM_FUNCTION MusicGetKnob
  633.     ENDIF
  634.  
  635. ;
  636. ; pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  637. ;
  638.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  639.         Macro
  640.         _MusicSetKnob
  641.             move.l              #$00080013,-(sp)
  642.             moveq               #0,D0
  643.             dc.w                $A82A
  644.         EndM
  645.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  646.         IMPORT_CFM_FUNCTION MusicSetKnob
  647.     ENDIF
  648.  
  649. ;
  650. ; pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
  651. ;
  652.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  653.         Macro
  654.         _MusicGetPartName
  655.             move.l              #$00080014,-(sp)
  656.             moveq               #0,D0
  657.             dc.w                $A82A
  658.         EndM
  659.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  660.         IMPORT_CFM_FUNCTION MusicGetPartName
  661.     ENDIF
  662.  
  663. ;
  664. ; pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
  665. ;
  666.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  667.         Macro
  668.         _MusicSetPartName
  669.             move.l              #$00080015,-(sp)
  670.             moveq               #0,D0
  671.             dc.w                $A82A
  672.         EndM
  673.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  674.         IMPORT_CFM_FUNCTION MusicSetPartName
  675.     ENDIF
  676.  
  677. ;
  678. ; pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *instrumentNumber, unsigned long *fit)
  679. ;
  680.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  681.         Macro
  682.         _MusicFindTone
  683.             move.l              #$000C0016,-(sp)
  684.             moveq               #0,D0
  685.             dc.w                $A82A
  686.         EndM
  687.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  688.         IMPORT_CFM_FUNCTION MusicFindTone
  689.     ENDIF
  690.  
  691. ;
  692. ; pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  693. ;
  694.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  695.         Macro
  696.         _MusicPlayNote
  697.             move.l              #$000C0017,-(sp)
  698.             moveq               #0,D0
  699.             dc.w                $A82A
  700.         EndM
  701.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  702.         IMPORT_CFM_FUNCTION MusicPlayNote
  703.     ENDIF
  704.  
  705. ;
  706. ; pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  707. ;
  708.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  709.         Macro
  710.         _MusicResetPart
  711.             move.l              #$00040018,-(sp)
  712.             moveq               #0,D0
  713.             dc.w                $A82A
  714.         EndM
  715.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  716.         IMPORT_CFM_FUNCTION MusicResetPart
  717.     ENDIF
  718.  
  719. ;
  720. ; pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
  721. ;
  722.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  723.         Macro
  724.         _MusicSetPartController
  725.             move.l              #$000C0019,-(sp)
  726.             moveq               #0,D0
  727.             dc.w                $A82A
  728.         EndM
  729.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  730.         IMPORT_CFM_FUNCTION MusicSetPartController
  731.     ENDIF
  732.  
  733.  
  734. ;
  735. ; pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
  736. ;
  737.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  738.         Macro
  739.         _MusicGetPartController
  740.             move.l              #$0008001A,-(sp)
  741.             moveq               #0,D0
  742.             dc.w                $A82A
  743.         EndM
  744.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  745.         IMPORT_CFM_FUNCTION MusicGetPartController
  746.     ENDIF
  747.  
  748. ;
  749. ; pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  750. ;
  751.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  752.         Macro
  753.         _MusicGetMIDIProc
  754.             move.l              #$0008001B,-(sp)
  755.             moveq               #0,D0
  756.             dc.w                $A82A
  757.         EndM
  758.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  759.         IMPORT_CFM_FUNCTION MusicGetMIDIProc
  760.     ENDIF
  761.  
  762. ;
  763. ; pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  764. ;
  765.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  766.         Macro
  767.         _MusicSetMIDIProc
  768.             move.l              #$0008001C,-(sp)
  769.             moveq               #0,D0
  770.             dc.w                $A82A
  771.         EndM
  772.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  773.         IMPORT_CFM_FUNCTION MusicSetMIDIProc
  774.     ENDIF
  775.  
  776. ;
  777. ; pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  778. ;
  779.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  780.         Macro
  781.         _MusicGetInstrumentNames
  782.             move.l              #$0010001D,-(sp)
  783.             moveq               #0,D0
  784.             dc.w                $A82A
  785.         EndM
  786.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  787.         IMPORT_CFM_FUNCTION MusicGetInstrumentNames
  788.     ENDIF
  789.  
  790. ;
  791. ; pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  792. ;
  793.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  794.         Macro
  795.         _MusicGetDrumNames
  796.             move.l              #$000C001E,-(sp)
  797.             moveq               #0,D0
  798.             dc.w                $A82A
  799.         EndM
  800.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  801.         IMPORT_CFM_FUNCTION MusicGetDrumNames
  802.     ENDIF
  803.  
  804. ;
  805. ; pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  806. ;
  807.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  808.         Macro
  809.         _MusicGetMasterTune
  810.             move.l              #$0000001F,-(sp)
  811.             moveq               #0,D0
  812.             dc.w                $A82A
  813.         EndM
  814.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  815.         IMPORT_CFM_FUNCTION MusicGetMasterTune
  816.     ENDIF
  817.  
  818. ;
  819. ; pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  820. ;
  821.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  822.         Macro
  823.         _MusicSetMasterTune
  824.             move.l              #$00040020,-(sp)
  825.             moveq               #0,D0
  826.             dc.w                $A82A
  827.         EndM
  828.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  829.         IMPORT_CFM_FUNCTION MusicSetMasterTune
  830.     ENDIF
  831.  
  832.  
  833. ;
  834. ; pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  835. ;
  836.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  837.         Macro
  838.         _MusicGetInstrumentAboutInfo
  839.             move.l              #$00080022,-(sp)
  840.             moveq               #0,D0
  841.             dc.w                $A82A
  842.         EndM
  843.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  844.         IMPORT_CFM_FUNCTION MusicGetInstrumentAboutInfo
  845.     ENDIF
  846.  
  847. ;
  848. ; pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  849. ;
  850.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  851.         Macro
  852.         _MusicGetDeviceConnection
  853.             move.l              #$000C0023,-(sp)
  854.             moveq               #0,D0
  855.             dc.w                $A82A
  856.         EndM
  857.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  858.         IMPORT_CFM_FUNCTION MusicGetDeviceConnection
  859.     ENDIF
  860.  
  861. ;
  862. ; pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  863. ;
  864.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  865.         Macro
  866.         _MusicUseDeviceConnection
  867.             move.l              #$00080024,-(sp)
  868.             moveq               #0,D0
  869.             dc.w                $A82A
  870.         EndM
  871.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  872.         IMPORT_CFM_FUNCTION MusicUseDeviceConnection
  873.     ENDIF
  874.  
  875. ;
  876. ; pascal ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  877. ;
  878.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  879.         Macro
  880.         _MusicGetKnobSettingStrings
  881.             move.l              #$00140025,-(sp)
  882.             moveq               #0,D0
  883.             dc.w                $A82A
  884.         EndM
  885.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  886.         IMPORT_CFM_FUNCTION MusicGetKnobSettingStrings
  887.     ENDIF
  888.  
  889. ;
  890. ; pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  891. ;
  892.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  893.         Macro
  894.         _MusicGetMIDIPorts
  895.             move.l              #$00080026,-(sp)
  896.             moveq               #0,D0
  897.             dc.w                $A82A
  898.         EndM
  899.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  900.         IMPORT_CFM_FUNCTION MusicGetMIDIPorts
  901.     ENDIF
  902.  
  903. ;
  904. ; pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  905. ;
  906.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  907.         Macro
  908.         _MusicSendMIDI
  909.             move.l              #$00080027,-(sp)
  910.             moveq               #0,D0
  911.             dc.w                $A82A
  912.         EndM
  913.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  914.         IMPORT_CFM_FUNCTION MusicSendMIDI
  915.     ENDIF
  916.  
  917. ;
  918. ; pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  919. ;
  920.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  921.         Macro
  922.         _MusicReceiveMIDI
  923.             move.l              #$00080028,-(sp)
  924.             moveq               #0,D0
  925.             dc.w                $A82A
  926.         EndM
  927.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  928.         IMPORT_CFM_FUNCTION MusicReceiveMIDI
  929.     ENDIF
  930.  
  931. ;
  932. ; pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  933. ;
  934.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  935.         Macro
  936.         _MusicStartOffline
  937.             move.l              #$00140029,-(sp)
  938.             moveq               #0,D0
  939.             dc.w                $A82A
  940.         EndM
  941.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  942.         IMPORT_CFM_FUNCTION MusicStartOffline
  943.     ENDIF
  944.  
  945. ;
  946. ; pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  947. ;
  948.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  949.         Macro
  950.         _MusicSetOfflineTimeTo
  951.             move.l              #$0004002A,-(sp)
  952.             moveq               #0,D0
  953.             dc.w                $A82A
  954.         EndM
  955.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  956.         IMPORT_CFM_FUNCTION MusicSetOfflineTimeTo
  957.     ENDIF
  958.  
  959. ;
  960. ; pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  961. ;
  962.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  963.         Macro
  964.         _MusicGetInstrumentKnobDescription
  965.             move.l              #$0008002B,-(sp)
  966.             moveq               #0,D0
  967.             dc.w                $A82A
  968.         EndM
  969.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  970.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescription
  971.     ENDIF
  972.  
  973. ;
  974. ; pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  975. ;
  976.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  977.         Macro
  978.         _MusicGetDrumKnobDescription
  979.             move.l              #$0008002C,-(sp)
  980.             moveq               #0,D0
  981.             dc.w                $A82A
  982.         EndM
  983.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  984.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescription
  985.     ENDIF
  986.  
  987. ;
  988. ; pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  989. ;
  990.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  991.         Macro
  992.         _MusicGetKnobDescription
  993.             move.l              #$0008002D,-(sp)
  994.             moveq               #0,D0
  995.             dc.w                $A82A
  996.         EndM
  997.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  998.         IMPORT_CFM_FUNCTION MusicGetKnobDescription
  999.     ENDIF
  1000.  
  1001. ;
  1002. ; pascal ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
  1003. ;
  1004.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1005.         Macro
  1006.         _MusicGetInfoText
  1007.             move.l              #$000C002E,-(sp)
  1008.             moveq               #0,D0
  1009.             dc.w                $A82A
  1010.         EndM
  1011.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1012.         IMPORT_CFM_FUNCTION MusicGetInfoText
  1013.     ENDIF
  1014.  
  1015.  
  1016. kGetInstrumentInfoNoBuiltIn        EQU        $01
  1017. kGetInstrumentInfoMidiUserInst    EQU        $02
  1018. kGetInstrumentInfoNoIText        EQU        $04
  1019. ;
  1020. ; pascal ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
  1021. ;
  1022.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1023.         Macro
  1024.         _MusicGetInstrumentInfo
  1025.             move.l              #$0008002F,-(sp)
  1026.             moveq               #0,D0
  1027.             dc.w                $A82A
  1028.         EndM
  1029.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1030.         IMPORT_CFM_FUNCTION MusicGetInstrumentInfo
  1031.     ENDIF
  1032.  
  1033.  
  1034.  
  1035.  
  1036. ;
  1037. ; pascal ComponentResult MusicTask(MusicComponent mc)
  1038. ;
  1039.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1040.         Macro
  1041.         _MusicTask
  1042.             move.l              #$00000031,-(sp)
  1043.             moveq               #0,D0
  1044.             dc.w                $A82A
  1045.         EndM
  1046.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1047.         IMPORT_CFM_FUNCTION MusicTask
  1048.     ENDIF
  1049.  
  1050. ;
  1051. ; pascal ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
  1052. ;
  1053.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1054.         Macro
  1055.         _MusicSetPartInstrumentNumberInterruptSafe
  1056.             move.l              #$00080032,-(sp)
  1057.             moveq               #0,D0
  1058.             dc.w                $A82A
  1059.         EndM
  1060.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1061.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumberInterruptSafe
  1062.     ENDIF
  1063.  
  1064. ;
  1065. ; pascal ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
  1066. ;
  1067.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1068.         Macro
  1069.         _MusicSetPartSoundLocalization
  1070.             move.l              #$00080033,-(sp)
  1071.             moveq               #0,D0
  1072.             dc.w                $A82A
  1073.         EndM
  1074.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1075.         IMPORT_CFM_FUNCTION MusicSetPartSoundLocalization
  1076.     ENDIF
  1077.  
  1078.  
  1079.  
  1080.  
  1081. ;
  1082. ; pascal ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
  1083. ;
  1084.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1085.         Macro
  1086.         _MusicGenericConfigure
  1087.             move.l              #$000C0100,-(sp)
  1088.             moveq               #0,D0
  1089.             dc.w                $A82A
  1090.         EndM
  1091.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1092.         IMPORT_CFM_FUNCTION MusicGenericConfigure
  1093.     ENDIF
  1094.  
  1095. ;
  1096. ; pascal ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
  1097. ;
  1098.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1099.         Macro
  1100.         _MusicGenericGetPart
  1101.             move.l              #$00080101,-(sp)
  1102.             moveq               #0,D0
  1103.             dc.w                $A82A
  1104.         EndM
  1105.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1106.         IMPORT_CFM_FUNCTION MusicGenericGetPart
  1107.     ENDIF
  1108.  
  1109. ;
  1110. ; pascal ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
  1111. ;
  1112.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1113.         Macro
  1114.         _MusicGenericGetKnobList
  1115.             move.l              #$00080102,-(sp)
  1116.             moveq               #0,D0
  1117.             dc.w                $A82A
  1118.         EndM
  1119.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1120.         IMPORT_CFM_FUNCTION MusicGenericGetKnobList
  1121.     ENDIF
  1122.  
  1123. ;
  1124. ; pascal ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
  1125. ;
  1126.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1127.         Macro
  1128.         _MusicDerivedMIDISend
  1129.             move.l              #$00040200,-(sp)
  1130.             moveq               #0,D0
  1131.             dc.w                $A82A
  1132.         EndM
  1133.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1134.         IMPORT_CFM_FUNCTION MusicDerivedMIDISend
  1135.     ENDIF
  1136.  
  1137. ;
  1138. ; pascal ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
  1139. ;
  1140.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1141.         Macro
  1142.         _MusicDerivedSetKnob
  1143.             move.l              #$00180201,-(sp)
  1144.             moveq               #0,D0
  1145.             dc.w                $A82A
  1146.         EndM
  1147.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1148.         IMPORT_CFM_FUNCTION MusicDerivedSetKnob
  1149.     ENDIF
  1150.  
  1151. ;
  1152. ; pascal ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
  1153. ;
  1154.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1155.         Macro
  1156.         _MusicDerivedSetPart
  1157.             move.l              #$00080202,-(sp)
  1158.             moveq               #0,D0
  1159.             dc.w                $A82A
  1160.         EndM
  1161.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1162.         IMPORT_CFM_FUNCTION MusicDerivedSetPart
  1163.     ENDIF
  1164.  
  1165. ;
  1166. ; pascal ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
  1167. ;
  1168.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1169.         Macro
  1170.         _MusicDerivedSetInstrument
  1171.             move.l              #$00080203,-(sp)
  1172.             moveq               #0,D0
  1173.             dc.w                $A82A
  1174.         EndM
  1175.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1176.         IMPORT_CFM_FUNCTION MusicDerivedSetInstrument
  1177.     ENDIF
  1178.  
  1179. ;
  1180. ; pascal ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
  1181. ;
  1182.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1183.         Macro
  1184.         _MusicDerivedSetPartInstrumentNumber
  1185.             move.l              #$00080204,-(sp)
  1186.             moveq               #0,D0
  1187.             dc.w                $A82A
  1188.         EndM
  1189.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1190.         IMPORT_CFM_FUNCTION MusicDerivedSetPartInstrumentNumber
  1191.     ENDIF
  1192.  
  1193. ;
  1194. ; pascal ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendProcPtr midiProc, long refcon, long midiChannel)
  1195. ;
  1196.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1197.         Macro
  1198.         _MusicDerivedSetMIDI
  1199.             move.l              #$000C0205,-(sp)
  1200.             moveq               #0,D0
  1201.             dc.w                $A82A
  1202.         EndM
  1203.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1204.         IMPORT_CFM_FUNCTION MusicDerivedSetMIDI
  1205.     ENDIF
  1206.  
  1207. ;
  1208. ; pascal ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
  1209. ;
  1210.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1211.         Macro
  1212.         _MusicDerivedStorePartInstrument
  1213.             move.l              #$000C0206,-(sp)
  1214.             moveq               #0,D0
  1215.             dc.w                $A82A
  1216.         EndM
  1217.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1218.         IMPORT_CFM_FUNCTION MusicDerivedStorePartInstrument
  1219.     ENDIF
  1220.  
  1221.  
  1222.  
  1223.  
  1224. ;  Mask bit for returned value by InstrumentFind.
  1225.  
  1226. kInstrumentExactMatch            EQU        $00020000
  1227. kInstrumentRecommendedSubstitute EQU    $00010000
  1228. kInstrumentQualityField            EQU        $FF000000
  1229. kInstrumentRoland8BitQuality    EQU        $05000000
  1230. ; typedef struct InstrumentAboutInfo *    InstrumentAboutInfoPtr
  1231.  
  1232. ; typedef InstrumentAboutInfoPtr *        InstrumentAboutInfoHandle
  1233.  
  1234. GMInstrumentInfo        RECORD 0
  1235. cmpInstID                 ds.l    1                ; offset: $0 (0)
  1236. gmInstNum                 ds.l    1                ; offset: $4 (4)
  1237. instMatch                 ds.l    1                ; offset: $8 (8)
  1238. sizeof                     EQU *                    ; size:   $C (12)
  1239.                         ENDR
  1240. ; typedef struct GMInstrumentInfo *        GMInstrumentInfoPtr
  1241.  
  1242. ; typedef GMInstrumentInfoPtr *            GMInstrumentInfoHandle
  1243.  
  1244. nonGMInstrumentInfoRecord RECORD 0
  1245. cmpInstID                 ds.l    1                ; offset: $0 (0)        ;  if 0, category name
  1246. flags                     ds.l    1                ; offset: $4 (4)        ;  match, show in picker
  1247. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  1248. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  1249. sizeof                     EQU *                    ; size:   $10 (16)
  1250.                         ENDR
  1251. nonGMInstrumentInfo        RECORD 0
  1252. recordCount                 ds.l    1                ; offset: $0 (0)
  1253. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  1254. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itext/name atoms for instruments
  1255. instInfo                 ds        nonGMInstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  1256. sizeof                     EQU *                    ; size:   $1C (28)
  1257.                         ENDR
  1258. ; typedef struct nonGMInstrumentInfo *    nonGMInstrumentInfoPtr
  1259.  
  1260. ; typedef nonGMInstrumentInfoPtr *        nonGMInstrumentInfoHandle
  1261.  
  1262. InstCompInfo            RECORD 0
  1263. infoSize                 ds.l    1                ; offset: $0 (0)        ;  size of this record
  1264. InstrumentLibraryName     ds        Str31            ; offset: $4 (4)
  1265. InstrumentLibraryITxt     ds.l    1                ; offset: $24 (36)        ;  itext/name atoms for instruments
  1266. GMinstrumentCount         ds.l    1                ; offset: $28 (40)
  1267. GMinstrumentInfo         ds.l    1                ; offset: $2C (44)
  1268. GMdrumCount                 ds.l    1                ; offset: $30 (48)
  1269. GMdrumInfo                 ds.l    1                ; offset: $34 (52)
  1270. nonGMinstrumentCount     ds.l    1                ; offset: $38 (56)
  1271. nonGMinstrumentInfo         ds.l    1                ; offset: $3C (60)
  1272. sizeof                     EQU *                    ; size:   $40 (64)
  1273.                         ENDR
  1274. ; typedef struct InstCompInfo *            InstCompInfoPtr
  1275.  
  1276. ; typedef InstCompInfoPtr *                InstCompInfoHandle
  1277.  
  1278. ;
  1279. ; pascal ComponentResult InstrumentGetInst(ComponentInstance ci, long instID, AtomicInstrument *atomicInst, long flags)
  1280. ;
  1281.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1282.         Macro
  1283.         _InstrumentGetInst
  1284.             move.l              #$000C0001,-(sp)
  1285.             moveq               #0,D0
  1286.             dc.w                $A82A
  1287.         EndM
  1288.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1289.         IMPORT_CFM_FUNCTION InstrumentGetInst
  1290.     ENDIF
  1291.  
  1292. ;
  1293. ; pascal ComponentResult InstrumentGetInfo(ComponentInstance ci, long getInstrumentInfoFlags, InstCompInfoHandle *instInfo)
  1294. ;
  1295.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1296.         Macro
  1297.         _InstrumentGetInfo
  1298.             move.l              #$00080002,-(sp)
  1299.             moveq               #0,D0
  1300.             dc.w                $A82A
  1301.         EndM
  1302.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1303.         IMPORT_CFM_FUNCTION InstrumentGetInfo
  1304.     ENDIF
  1305.  
  1306. ;
  1307. ; pascal ComponentResult InstrumentInitialize(ComponentInstance ci, long initFormat, void *initParams)
  1308. ;
  1309.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1310.         Macro
  1311.         _InstrumentInitialize
  1312.             move.l              #$00080003,-(sp)
  1313.             moveq               #0,D0
  1314.             dc.w                $A82A
  1315.         EndM
  1316.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1317.         IMPORT_CFM_FUNCTION InstrumentInitialize
  1318.     ENDIF
  1319.  
  1320. ;
  1321. ; pascal ComponentResult InstrumentOpenComponentResFile(ComponentInstance ci, short *resFile)
  1322. ;
  1323.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1324.         Macro
  1325.         _InstrumentOpenComponentResFile
  1326.             move.l              #$00040004,-(sp)
  1327.             moveq               #0,D0
  1328.             dc.w                $A82A
  1329.         EndM
  1330.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1331.         IMPORT_CFM_FUNCTION InstrumentOpenComponentResFile
  1332.     ENDIF
  1333.  
  1334. ;
  1335. ; pascal ComponentResult InstrumentCloseComponentResFile(ComponentInstance ci, short resFile)
  1336. ;
  1337.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1338.         Macro
  1339.         _InstrumentCloseComponentResFile
  1340.             move.l              #$00020005,-(sp)
  1341.             moveq               #0,D0
  1342.             dc.w                $A82A
  1343.         EndM
  1344.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1345.         IMPORT_CFM_FUNCTION InstrumentCloseComponentResFile
  1346.     ENDIF
  1347.  
  1348. ;
  1349. ; pascal ComponentResult InstrumentGetComponentRefCon(ComponentInstance ci, void **refCon)
  1350. ;
  1351.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1352.         Macro
  1353.         _InstrumentGetComponentRefCon
  1354.             move.l              #$00040006,-(sp)
  1355.             moveq               #0,D0
  1356.             dc.w                $A82A
  1357.         EndM
  1358.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1359.         IMPORT_CFM_FUNCTION InstrumentGetComponentRefCon
  1360.     ENDIF
  1361.  
  1362. ;
  1363. ; pascal ComponentResult InstrumentSetComponentRefCon(ComponentInstance ci, void *refCon)
  1364. ;
  1365.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1366.         Macro
  1367.         _InstrumentSetComponentRefCon
  1368.             move.l              #$00040007,-(sp)
  1369.             moveq               #0,D0
  1370.             dc.w                $A82A
  1371.         EndM
  1372.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1373.         IMPORT_CFM_FUNCTION InstrumentSetComponentRefCon
  1374.     ENDIF
  1375.  
  1376.  
  1377.  
  1378. ; --------------------------
  1379. ;    Types
  1380. ;--------------------------
  1381.  
  1382.  
  1383.  
  1384. kSynthesizerConnectionMono        EQU        1                    ; if set, and synth can be mono/poly, then the partCount channels from the system channel are hogged 
  1385. kSynthesizerConnectionMMgr        EQU        2                    ; this connection imported from the MIDI Mgr 
  1386. kSynthesizerConnectionOMS        EQU        4                    ; this connection imported from OMS 
  1387. kSynthesizerConnectionQT        EQU        8                    ; this connection is a QuickTime-only port 
  1388. kSynthesizerConnectionFMS        EQU        16                    ; this connection imported from FMS 
  1389. ;  used for MIDI device only 
  1390. SynthesizerConnections    RECORD 0
  1391. clientID                 ds.l    1                ; offset: $0 (0)
  1392. inputPortID                 ds.l    1                ; offset: $4 (4)        ;  terminology death: this port is used to SEND to the midi synth 
  1393. outputPortID             ds.l    1                ; offset: $8 (8)        ;  terminology death: this port receives from a keyboard or other control device 
  1394. midiChannel                 ds.l    1                ; offset: $C (12)        ;  The system channel; others are configurable (or the nubus slot number) 
  1395. flags                     ds.l    1                ; offset: $10 (16)
  1396. unique                     ds.l    1                ; offset: $14 (20)        ;  unique id may be used instead of index, to getinfo and unregister calls 
  1397. reserved1                 ds.l    1                ; offset: $18 (24)        ;  should be zero 
  1398. reserved2                 ds.l    1                ; offset: $1C (28)        ;  should be zero 
  1399. sizeof                     EQU *                    ; size:   $20 (32)
  1400.                         ENDR
  1401. QTMIDIPort                RECORD 0
  1402. portConnections             ds        SynthesizerConnections ; offset: $0 (0)
  1403. portName                 ds        Str63            ; offset: $20 (32)
  1404. sizeof                     EQU *                    ; size:   $60 (96)
  1405.                         ENDR
  1406.  
  1407. kNoteRequestNoGM                EQU        1                    ; dont degrade to a GM synth 
  1408. kNoteRequestNoSynthType            EQU        2                    ; dont degrade to another synth of same type but different name 
  1409. kNoteRequestSynthMustMatch        EQU        4                    ; synthType must be a match, including kGMSynthComponentSubType 
  1410. ; typedef ComponentInstance             NoteAllocator
  1411.  
  1412. NoteRequestInfo            RECORD 0
  1413. flags                     ds.b    1                ; offset: $0 (0)        ;  1: dont accept GM match, 2: dont accept same-synth-type match 
  1414. reserved                 ds.b    1                ; offset: $1 (1)        ;  must be zero 
  1415. polyphony                 ds.w    1                ; offset: $2 (2)        ;  Maximum number of voices 
  1416. typicalPolyphony         ds.l    1                ; offset: $4 (4)        ;  Hint for level mixing 
  1417. sizeof                     EQU *                    ; size:   $8 (8)
  1418.                         ENDR
  1419. NoteRequest                RECORD 0
  1420. info                     ds        NoteRequestInfo ; offset: $0 (0)
  1421. tone                     ds        ToneDescription ; offset: $8 (8)
  1422. sizeof                     EQU *                    ; size:   $54 (84)
  1423.                         ENDR
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429. kPickDontMix                    EQU        1                    ; dont mix instruments with drum sounds 
  1430. kPickSameSynth                    EQU        2                    ; only allow the same device that went in, to come out 
  1431. kPickUserInsts                    EQU        4                    ; show user insts in addition to ROM voices 
  1432. kPickEditAllowEdit                EQU        8                    ; lets user switch over to edit mode 
  1433. kPickEditAllowPick                EQU        16                    ; lets the user switch over to pick mode 
  1434. kPickEditSynthGlobal            EQU        32                    ; edit the global knobs of the synth 
  1435. kPickEditControllers            EQU        64                    ; edit the controllers of the notechannel 
  1436.  
  1437.  
  1438. kNoteAllocatorComponentType        EQU        'nota'
  1439.  
  1440. ; --------------------------------
  1441. ;    Note Allocator Prototypes
  1442. ;--------------------------------
  1443.  
  1444. ;
  1445. ; pascal ComponentResult NARegisterMusicDevice(NoteAllocator ci, OSType synthType, Str31 name, SynthesizerConnections *connections)
  1446. ;
  1447.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1448.         Macro
  1449.         _NARegisterMusicDevice
  1450.             move.l              #$000C0000,-(sp)
  1451.             moveq               #0,D0
  1452.             dc.w                $A82A
  1453.         EndM
  1454.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1455.         IMPORT_CFM_FUNCTION NARegisterMusicDevice
  1456.     ENDIF
  1457.  
  1458. ;
  1459. ; pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator ci, long index)
  1460. ;
  1461.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1462.         Macro
  1463.         _NAUnregisterMusicDevice
  1464.             move.l              #$00040001,-(sp)
  1465.             moveq               #0,D0
  1466.             dc.w                $A82A
  1467.         EndM
  1468.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1469.         IMPORT_CFM_FUNCTION NAUnregisterMusicDevice
  1470.     ENDIF
  1471.  
  1472. ;
  1473. ; pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator ci, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  1474. ;
  1475.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1476.         Macro
  1477.         _NAGetRegisteredMusicDevice
  1478.             move.l              #$00140002,-(sp)
  1479.             moveq               #0,D0
  1480.             dc.w                $A82A
  1481.         EndM
  1482.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1483.         IMPORT_CFM_FUNCTION NAGetRegisteredMusicDevice
  1484.     ENDIF
  1485.  
  1486. ;
  1487. ; pascal ComponentResult NASaveMusicConfiguration(NoteAllocator ci)
  1488. ;
  1489.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1490.         Macro
  1491.         _NASaveMusicConfiguration
  1492.             move.l              #$00000003,-(sp)
  1493.             moveq               #0,D0
  1494.             dc.w                $A82A
  1495.         EndM
  1496.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1497.         IMPORT_CFM_FUNCTION NASaveMusicConfiguration
  1498.     ENDIF
  1499.  
  1500. ;
  1501. ; pascal ComponentResult NANewNoteChannel(NoteAllocator ci, NoteRequest *noteRequest, NoteChannel *outChannel)
  1502. ;
  1503.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1504.         Macro
  1505.         _NANewNoteChannel
  1506.             move.l              #$00080004,-(sp)
  1507.             moveq               #0,D0
  1508.             dc.w                $A82A
  1509.         EndM
  1510.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1511.         IMPORT_CFM_FUNCTION NANewNoteChannel
  1512.     ENDIF
  1513.  
  1514. ;
  1515. ; pascal ComponentResult NADisposeNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1516. ;
  1517.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1518.         Macro
  1519.         _NADisposeNoteChannel
  1520.             move.l              #$00040005,-(sp)
  1521.             moveq               #0,D0
  1522.             dc.w                $A82A
  1523.         EndM
  1524.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1525.         IMPORT_CFM_FUNCTION NADisposeNoteChannel
  1526.     ENDIF
  1527.  
  1528. ;
  1529. ; pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator ci, NoteChannel noteChannel, long *index, long *part)
  1530. ;
  1531.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1532.         Macro
  1533.         _NAGetNoteChannelInfo
  1534.             move.l              #$000C0006,-(sp)
  1535.             moveq               #0,D0
  1536.             dc.w                $A82A
  1537.         EndM
  1538.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1539.         IMPORT_CFM_FUNCTION NAGetNoteChannelInfo
  1540.     ENDIF
  1541.  
  1542. ;
  1543. ; pascal ComponentResult NAPrerollNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1544. ;
  1545.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1546.         Macro
  1547.         _NAPrerollNoteChannel
  1548.             move.l              #$00040007,-(sp)
  1549.             moveq               #0,D0
  1550.             dc.w                $A82A
  1551.         EndM
  1552.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1553.         IMPORT_CFM_FUNCTION NAPrerollNoteChannel
  1554.     ENDIF
  1555.  
  1556. ;
  1557. ; pascal ComponentResult NAUnrollNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1558. ;
  1559.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1560.         Macro
  1561.         _NAUnrollNoteChannel
  1562.             move.l              #$00040008,-(sp)
  1563.             moveq               #0,D0
  1564.             dc.w                $A82A
  1565.         EndM
  1566.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1567.         IMPORT_CFM_FUNCTION NAUnrollNoteChannel
  1568.     ENDIF
  1569.  
  1570.  
  1571. ;
  1572. ; pascal ComponentResult NASetNoteChannelVolume(NoteAllocator ci, NoteChannel noteChannel, Fixed volume)
  1573. ;
  1574.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1575.         Macro
  1576.         _NASetNoteChannelVolume
  1577.             move.l              #$0008000B,-(sp)
  1578.             moveq               #0,D0
  1579.             dc.w                $A82A
  1580.         EndM
  1581.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1582.         IMPORT_CFM_FUNCTION NASetNoteChannelVolume
  1583.     ENDIF
  1584.  
  1585. ;
  1586. ; pascal ComponentResult NAResetNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1587. ;
  1588.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1589.         Macro
  1590.         _NAResetNoteChannel
  1591.             move.l              #$0004000C,-(sp)
  1592.             moveq               #0,D0
  1593.             dc.w                $A82A
  1594.         EndM
  1595.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1596.         IMPORT_CFM_FUNCTION NAResetNoteChannel
  1597.     ENDIF
  1598.  
  1599. ;
  1600. ; pascal ComponentResult NAPlayNote(NoteAllocator ci, NoteChannel noteChannel, long pitch, long velocity)
  1601. ;
  1602.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1603.         Macro
  1604.         _NAPlayNote
  1605.             move.l              #$000C000D,-(sp)
  1606.             moveq               #0,D0
  1607.             dc.w                $A82A
  1608.         EndM
  1609.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1610.         IMPORT_CFM_FUNCTION NAPlayNote
  1611.     ENDIF
  1612.  
  1613. ;
  1614. ; pascal ComponentResult NASetController(NoteAllocator ci, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  1615. ;
  1616.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1617.         Macro
  1618.         _NASetController
  1619.             move.l              #$000C000E,-(sp)
  1620.             moveq               #0,D0
  1621.             dc.w                $A82A
  1622.         EndM
  1623.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1624.         IMPORT_CFM_FUNCTION NASetController
  1625.     ENDIF
  1626.  
  1627. ;
  1628. ; pascal ComponentResult NASetKnob(NoteAllocator ci, NoteChannel noteChannel, long knobNumber, long knobValue)
  1629. ;
  1630.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1631.         Macro
  1632.         _NASetKnob
  1633.             move.l              #$000C000F,-(sp)
  1634.             moveq               #0,D0
  1635.             dc.w                $A82A
  1636.         EndM
  1637.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1638.         IMPORT_CFM_FUNCTION NASetKnob
  1639.     ENDIF
  1640.  
  1641. ;
  1642. ; pascal ComponentResult NAFindNoteChannelTone(NoteAllocator ci, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  1643. ;
  1644.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1645.         Macro
  1646.         _NAFindNoteChannelTone
  1647.             move.l              #$000C0010,-(sp)
  1648.             moveq               #0,D0
  1649.             dc.w                $A82A
  1650.         EndM
  1651.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1652.         IMPORT_CFM_FUNCTION NAFindNoteChannelTone
  1653.     ENDIF
  1654.  
  1655. ;
  1656. ; pascal ComponentResult NASetInstrumentNumber(NoteAllocator ci, NoteChannel noteChannel, long instrumentNumber)
  1657. ;
  1658.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1659.         Macro
  1660.         _NASetInstrumentNumber
  1661.             move.l              #$00080011,-(sp)
  1662.             moveq               #0,D0
  1663.             dc.w                $A82A
  1664.         EndM
  1665.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1666.         IMPORT_CFM_FUNCTION NASetInstrumentNumber
  1667.     ENDIF
  1668.  
  1669.  
  1670.  
  1671. ;
  1672. ; pascal ComponentResult NAPickInstrument(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  1673. ;
  1674.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1675.         Macro
  1676.         _NAPickInstrument
  1677.             move.l              #$001C0012,-(sp)
  1678.             moveq               #0,D0
  1679.             dc.w                $A82A
  1680.         EndM
  1681.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1682.         IMPORT_CFM_FUNCTION NAPickInstrument
  1683.     ENDIF
  1684.  
  1685. ;
  1686. ; pascal ComponentResult NAPickArrangement(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
  1687. ;
  1688.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1689.         Macro
  1690.         _NAPickArrangement
  1691.             move.l              #$00180013,-(sp)
  1692.             moveq               #0,D0
  1693.             dc.w                $A82A
  1694.         EndM
  1695.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1696.         IMPORT_CFM_FUNCTION NAPickArrangement
  1697.     ENDIF
  1698.  
  1699.  
  1700. ;
  1701. ; pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator ci, SynthesizerConnections *sc)
  1702. ;
  1703.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1704.         Macro
  1705.         _NASetDefaultMIDIInput
  1706.             move.l              #$00040015,-(sp)
  1707.             moveq               #0,D0
  1708.             dc.w                $A82A
  1709.         EndM
  1710.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1711.         IMPORT_CFM_FUNCTION NASetDefaultMIDIInput
  1712.     ENDIF
  1713.  
  1714. ;
  1715. ; pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator ci, SynthesizerConnections *sc)
  1716. ;
  1717.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1718.         Macro
  1719.         _NAGetDefaultMIDIInput
  1720.             move.l              #$00040016,-(sp)
  1721.             moveq               #0,D0
  1722.             dc.w                $A82A
  1723.         EndM
  1724.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1725.         IMPORT_CFM_FUNCTION NAGetDefaultMIDIInput
  1726.     ENDIF
  1727.  
  1728.  
  1729. ;
  1730. ; pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator ci, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  1731. ;
  1732.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1733.         Macro
  1734.         _NAUseDefaultMIDIInput
  1735.             move.l              #$000C0019,-(sp)
  1736.             moveq               #0,D0
  1737.             dc.w                $A82A
  1738.         EndM
  1739.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1740.         IMPORT_CFM_FUNCTION NAUseDefaultMIDIInput
  1741.     ENDIF
  1742.  
  1743. ;
  1744. ; pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator ci)
  1745. ;
  1746.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1747.         Macro
  1748.         _NALoseDefaultMIDIInput
  1749.             move.l              #$0000001A,-(sp)
  1750.             moveq               #0,D0
  1751.             dc.w                $A82A
  1752.         EndM
  1753.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1754.         IMPORT_CFM_FUNCTION NALoseDefaultMIDIInput
  1755.     ENDIF
  1756.  
  1757. ;
  1758. ; pascal ComponentResult NAStuffToneDescription(NoteAllocator ci, long gmNumber, ToneDescription *td)
  1759. ;
  1760.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1761.         Macro
  1762.         _NAStuffToneDescription
  1763.             move.l              #$0008001B,-(sp)
  1764.             moveq               #0,D0
  1765.             dc.w                $A82A
  1766.         EndM
  1767.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1768.         IMPORT_CFM_FUNCTION NAStuffToneDescription
  1769.     ENDIF
  1770.  
  1771. ;
  1772. ; pascal ComponentResult NACopyrightDialog(NoteAllocator ci, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  1773. ;
  1774.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1775.         Macro
  1776.         _NACopyrightDialog
  1777.             move.l              #$001C001C,-(sp)
  1778.             moveq               #0,D0
  1779.             dc.w                $A82A
  1780.         EndM
  1781.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1782.         IMPORT_CFM_FUNCTION NACopyrightDialog
  1783.     ENDIF
  1784.  
  1785.  
  1786.  
  1787. ;      kNADummyOneSelect = 29
  1788. ;      kNADummyTwoSelect = 30
  1789.  
  1790.  
  1791.  
  1792. ;
  1793. ; pascal ComponentResult NAGetIndNoteChannel(NoteAllocator ci, long index, NoteChannel *nc, long *seed)
  1794. ;
  1795.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1796.         Macro
  1797.         _NAGetIndNoteChannel
  1798.             move.l              #$000C001F,-(sp)
  1799.             moveq               #0,D0
  1800.             dc.w                $A82A
  1801.         EndM
  1802.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1803.         IMPORT_CFM_FUNCTION NAGetIndNoteChannel
  1804.     ENDIF
  1805.  
  1806.  
  1807. ;
  1808. ; pascal ComponentResult NAGetMIDIPorts(NoteAllocator ci, Handle *inputPorts, Handle *outputPorts)
  1809. ;
  1810.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1811.         Macro
  1812.         _NAGetMIDIPorts
  1813.             move.l              #$00080021,-(sp)
  1814.             moveq               #0,D0
  1815.             dc.w                $A82A
  1816.         EndM
  1817.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1818.         IMPORT_CFM_FUNCTION NAGetMIDIPorts
  1819.     ENDIF
  1820.  
  1821. ;
  1822. ; pascal ComponentResult NAGetNoteRequest(NoteAllocator ci, NoteChannel noteChannel, NoteRequest *nrOut)
  1823. ;
  1824.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1825.         Macro
  1826.         _NAGetNoteRequest
  1827.             move.l              #$00080022,-(sp)
  1828.             moveq               #0,D0
  1829.             dc.w                $A82A
  1830.         EndM
  1831.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1832.         IMPORT_CFM_FUNCTION NAGetNoteRequest
  1833.     ENDIF
  1834.  
  1835. ;
  1836. ; pascal ComponentResult NASendMIDI(NoteAllocator ci, NoteChannel noteChannel, MusicMIDIPacket *mp)
  1837. ;
  1838.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1839.         Macro
  1840.         _NASendMIDI
  1841.             move.l              #$00080023,-(sp)
  1842.             moveq               #0,D0
  1843.             dc.w                $A82A
  1844.         EndM
  1845.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1846.         IMPORT_CFM_FUNCTION NASendMIDI
  1847.     ENDIF
  1848.  
  1849. ;
  1850. ; pascal ComponentResult NAPickEditInstrument(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  1851. ;
  1852.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1853.         Macro
  1854.         _NAPickEditInstrument
  1855.             move.l              #$00180024,-(sp)
  1856.             moveq               #0,D0
  1857.             dc.w                $A82A
  1858.         EndM
  1859.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1860.         IMPORT_CFM_FUNCTION NAPickEditInstrument
  1861.     ENDIF
  1862.  
  1863. ;
  1864. ; pascal ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator ci, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
  1865. ;
  1866.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1867.         Macro
  1868.         _NANewNoteChannelFromAtomicInstrument
  1869.             move.l              #$000C0025,-(sp)
  1870.             moveq               #0,D0
  1871.             dc.w                $A82A
  1872.         EndM
  1873.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1874.         IMPORT_CFM_FUNCTION NANewNoteChannelFromAtomicInstrument
  1875.     ENDIF
  1876.  
  1877. ;
  1878. ; pascal ComponentResult NASetAtomicInstrument(NoteAllocator ci, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  1879. ;
  1880.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1881.         Macro
  1882.         _NASetAtomicInstrument
  1883.             move.l              #$000C0026,-(sp)
  1884.             moveq               #0,D0
  1885.             dc.w                $A82A
  1886.         EndM
  1887.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1888.         IMPORT_CFM_FUNCTION NASetAtomicInstrument
  1889.     ENDIF
  1890.  
  1891.  
  1892.  
  1893. ;
  1894. ; pascal ComponentResult NAGetKnob(NoteAllocator ci, NoteChannel noteChannel, long knobNumber, long *knobValue)
  1895. ;
  1896.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1897.         Macro
  1898.         _NAGetKnob
  1899.             move.l              #$000C0028,-(sp)
  1900.             moveq               #0,D0
  1901.             dc.w                $A82A
  1902.         EndM
  1903.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1904.         IMPORT_CFM_FUNCTION NAGetKnob
  1905.     ENDIF
  1906.  
  1907. ;
  1908. ; pascal ComponentResult NATask(NoteAllocator ci)
  1909. ;
  1910.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1911.         Macro
  1912.         _NATask
  1913.             move.l              #$00000029,-(sp)
  1914.             moveq               #0,D0
  1915.             dc.w                $A82A
  1916.         EndM
  1917.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1918.         IMPORT_CFM_FUNCTION NATask
  1919.     ENDIF
  1920.  
  1921. ;
  1922. ; pascal ComponentResult NASetNoteChannelBalance(NoteAllocator ci, NoteChannel noteChannel, long balance)
  1923. ;
  1924.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1925.         Macro
  1926.         _NASetNoteChannelBalance
  1927.             move.l              #$0008002A,-(sp)
  1928.             moveq               #0,D0
  1929.             dc.w                $A82A
  1930.         EndM
  1931.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1932.         IMPORT_CFM_FUNCTION NASetNoteChannelBalance
  1933.     ENDIF
  1934.  
  1935. ;
  1936. ; pascal ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator ci, NoteChannel noteChannel, long instrumentNumber)
  1937. ;
  1938.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1939.         Macro
  1940.         _NASetInstrumentNumberInterruptSafe
  1941.             move.l              #$0008002B,-(sp)
  1942.             moveq               #0,D0
  1943.             dc.w                $A82A
  1944.         EndM
  1945.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1946.         IMPORT_CFM_FUNCTION NASetInstrumentNumberInterruptSafe
  1947.     ENDIF
  1948.  
  1949. ;
  1950. ; pascal ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator ci, NoteChannel noteChannel, Handle data)
  1951. ;
  1952.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1953.         Macro
  1954.         _NASetNoteChannelSoundLocalization
  1955.             move.l              #$0008002C,-(sp)
  1956.             moveq               #0,D0
  1957.             dc.w                $A82A
  1958.         EndM
  1959.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1960.         IMPORT_CFM_FUNCTION NASetNoteChannelSoundLocalization
  1961.     ENDIF
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967. kTuneQueueDepth                    EQU        8                    ; Deepest you can queue tune segments 
  1968.  
  1969. TuneStatus                RECORD 0
  1970. tune                     ds.l    1                ; offset: $0 (0)        ;  currently playing tune 
  1971. tunePtr                     ds.l    1                ; offset: $4 (4)        ;  position within currently playing piece 
  1972. time                     ds.l    1                ; offset: $8 (8)        ;  current tune time 
  1973. queueCount                 ds.w    1                ; offset: $C (12)        ;  how many pieces queued up? 
  1974. queueSpots                 ds.w    1                ; offset: $E (14)        ;  How many more tunepieces can be queued 
  1975. queueTime                 ds.l    1                ; offset: $10 (16)        ;  How much time is queued up? (can be very inaccurate) 
  1976. reserved                 ds.l    3                ; offset: $14 (20)
  1977. sizeof                     EQU *                    ; size:   $20 (32)
  1978.                         ENDR
  1979. ; typedef ComponentInstance             TunePlayer
  1980.  
  1981.  
  1982. kTunePlayerType                    EQU        'tune'
  1983.  
  1984. ;
  1985. ; pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  1986. ;
  1987.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  1988.         Macro
  1989.         _TuneSetHeader
  1990.             move.l              #$00040004,-(sp)
  1991.             moveq               #0,D0
  1992.             dc.w                $A82A
  1993.         EndM
  1994.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  1995.         IMPORT_CFM_FUNCTION TuneSetHeader
  1996.     ENDIF
  1997.  
  1998. ;
  1999. ; pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2000. ;
  2001.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2002.         Macro
  2003.         _TuneGetTimeBase
  2004.             move.l              #$00040005,-(sp)
  2005.             moveq               #0,D0
  2006.             dc.w                $A82A
  2007.         EndM
  2008.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2009.         IMPORT_CFM_FUNCTION TuneGetTimeBase
  2010.     ENDIF
  2011.  
  2012. ;
  2013. ; pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2014. ;
  2015.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2016.         Macro
  2017.         _TuneSetTimeScale
  2018.             move.l              #$00040006,-(sp)
  2019.             moveq               #0,D0
  2020.             dc.w                $A82A
  2021.         EndM
  2022.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2023.         IMPORT_CFM_FUNCTION TuneSetTimeScale
  2024.     ENDIF
  2025.  
  2026. ;
  2027. ; pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2028. ;
  2029.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2030.         Macro
  2031.         _TuneGetTimeScale
  2032.             move.l              #$00040007,-(sp)
  2033.             moveq               #0,D0
  2034.             dc.w                $A82A
  2035.         EndM
  2036.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2037.         IMPORT_CFM_FUNCTION TuneGetTimeScale
  2038.     ENDIF
  2039.  
  2040. ;
  2041. ; pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2042. ;
  2043.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2044.         Macro
  2045.         _TuneGetIndexedNoteChannel
  2046.             move.l              #$00080008,-(sp)
  2047.             moveq               #0,D0
  2048.             dc.w                $A82A
  2049.         EndM
  2050.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2051.         IMPORT_CFM_FUNCTION TuneGetIndexedNoteChannel
  2052.     ENDIF
  2053.  
  2054.  
  2055. ;  Values for when to start. 
  2056.  
  2057. kTuneStartNow                    EQU        1                    ; start after buffer is implied 
  2058. kTuneDontClipNotes                EQU        2                    ; allow notes to finish their durations outside sample 
  2059. kTuneExcludeEdgeNotes            EQU        4                    ; dont play notes that start at end of tune 
  2060. kTuneQuickStart                    EQU        8                    ; Leave all the controllers where they are, ignore start time 
  2061. kTuneLoopUntil                    EQU        16                    ; loop a queued tune if there's nothing else in the queue 
  2062. kTuneStartNewMaster                EQU        16384
  2063. ;
  2064. ; pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2065. ;
  2066.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2067.         Macro
  2068.         _TuneQueue
  2069.             move.l              #$001C000A,-(sp)
  2070.             moveq               #0,D0
  2071.             dc.w                $A82A
  2072.         EndM
  2073.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2074.         IMPORT_CFM_FUNCTION TuneQueue
  2075.     ENDIF
  2076.  
  2077. ;
  2078. ; pascal ComponentResult TuneInstant(TunePlayer tp, void *tune, long tunePosition)
  2079. ;
  2080.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2081.         Macro
  2082.         _TuneInstant
  2083.             move.l              #$0008000B,-(sp)
  2084.             moveq               #0,D0
  2085.             dc.w                $A82A
  2086.         EndM
  2087.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2088.         IMPORT_CFM_FUNCTION TuneInstant
  2089.     ENDIF
  2090.  
  2091. ;
  2092. ; pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2093. ;
  2094.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2095.         Macro
  2096.         _TuneGetStatus
  2097.             move.l              #$0004000C,-(sp)
  2098.             moveq               #0,D0
  2099.             dc.w                $A82A
  2100.         EndM
  2101.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2102.         IMPORT_CFM_FUNCTION TuneGetStatus
  2103.     ENDIF
  2104.  
  2105. ;  Values for stopping. 
  2106.  
  2107. kTuneStopFade                    EQU        1                    ; do a quick, synchronous fadeout 
  2108. kTuneStopSustain                EQU        2                    ; don't silece notes 
  2109. kTuneStopInstant                EQU        4                    ; silence notes fast (else, decay them) 
  2110. kTuneStopReleaseChannels        EQU        8                    ; afterwards, let the channels go 
  2111. ;
  2112. ; pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2113. ;
  2114.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2115.         Macro
  2116.         _TuneStop
  2117.             move.l              #$0004000D,-(sp)
  2118.             moveq               #0,D0
  2119.             dc.w                $A82A
  2120.         EndM
  2121.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2122.         IMPORT_CFM_FUNCTION TuneStop
  2123.     ENDIF
  2124.  
  2125.  
  2126. ;
  2127. ; pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2128. ;
  2129.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2130.         Macro
  2131.         _TuneSetVolume
  2132.             move.l              #$00040010,-(sp)
  2133.             moveq               #0,D0
  2134.             dc.w                $A82A
  2135.         EndM
  2136.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2137.         IMPORT_CFM_FUNCTION TuneSetVolume
  2138.     ENDIF
  2139.  
  2140. ;
  2141. ; pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2142. ;
  2143.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2144.         Macro
  2145.         _TuneGetVolume
  2146.             move.l              #$00000011,-(sp)
  2147.             moveq               #0,D0
  2148.             dc.w                $A82A
  2149.         EndM
  2150.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2151.         IMPORT_CFM_FUNCTION TuneGetVolume
  2152.     ENDIF
  2153.  
  2154. ;
  2155. ; pascal ComponentResult TunePreroll(TunePlayer tp)
  2156. ;
  2157.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2158.         Macro
  2159.         _TunePreroll
  2160.             move.l              #$00000012,-(sp)
  2161.             moveq               #0,D0
  2162.             dc.w                $A82A
  2163.         EndM
  2164.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2165.         IMPORT_CFM_FUNCTION TunePreroll
  2166.     ENDIF
  2167.  
  2168. ;
  2169. ; pascal ComponentResult TuneUnroll(TunePlayer tp)
  2170. ;
  2171.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2172.         Macro
  2173.         _TuneUnroll
  2174.             move.l              #$00000013,-(sp)
  2175.             moveq               #0,D0
  2176.             dc.w                $A82A
  2177.         EndM
  2178.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2179.         IMPORT_CFM_FUNCTION TuneUnroll
  2180.     ENDIF
  2181.  
  2182. ;
  2183. ; pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2184. ;
  2185.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2186.         Macro
  2187.         _TuneSetNoteChannels
  2188.             move.l              #$00100014,-(sp)
  2189.             moveq               #0,D0
  2190.             dc.w                $A82A
  2191.         EndM
  2192.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2193.         IMPORT_CFM_FUNCTION TuneSetNoteChannels
  2194.     ENDIF
  2195.  
  2196. ;
  2197. ; pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2198. ;
  2199.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2200.         Macro
  2201.         _TuneSetPartTranspose
  2202.             move.l              #$000C0015,-(sp)
  2203.             moveq               #0,D0
  2204.             dc.w                $A82A
  2205.         EndM
  2206.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2207.         IMPORT_CFM_FUNCTION TuneSetPartTranspose
  2208.     ENDIF
  2209.  
  2210.  
  2211. ;
  2212. ; pascal NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
  2213. ;
  2214.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2215.         Macro
  2216.         _TuneGetNoteAllocator
  2217.             move.l              #$00000017,-(sp)
  2218.             moveq               #0,D0
  2219.             dc.w                $A82A
  2220.         EndM
  2221.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2222.         IMPORT_CFM_FUNCTION TuneGetNoteAllocator
  2223.     ENDIF
  2224.  
  2225. ;
  2226. ; pascal ComponentResult TuneSetSofter(TunePlayer tp, long softer)
  2227. ;
  2228.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2229.         Macro
  2230.         _TuneSetSofter
  2231.             move.l              #$00040018,-(sp)
  2232.             moveq               #0,D0
  2233.             dc.w                $A82A
  2234.         EndM
  2235.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2236.         IMPORT_CFM_FUNCTION TuneSetSofter
  2237.     ENDIF
  2238.  
  2239. ;
  2240. ; pascal ComponentResult TuneTask(TunePlayer tp)
  2241. ;
  2242.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2243.         Macro
  2244.         _TuneTask
  2245.             move.l              #$00000019,-(sp)
  2246.             moveq               #0,D0
  2247.             dc.w                $A82A
  2248.         EndM
  2249.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2250.         IMPORT_CFM_FUNCTION TuneTask
  2251.     ENDIF
  2252.  
  2253. ;
  2254. ; pascal ComponentResult TuneSetBalance(TunePlayer tp, long balance)
  2255. ;
  2256.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2257.         Macro
  2258.         _TuneSetBalance
  2259.             move.l              #$0004001A,-(sp)
  2260.             moveq               #0,D0
  2261.             dc.w                $A82A
  2262.         EndM
  2263.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2264.         IMPORT_CFM_FUNCTION TuneSetBalance
  2265.     ENDIF
  2266.  
  2267. ;
  2268. ; pascal ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
  2269. ;
  2270.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2271.         Macro
  2272.         _TuneSetSoundLocalization
  2273.             move.l              #$0004001B,-(sp)
  2274.             moveq               #0,D0
  2275.             dc.w                $A82A
  2276.         EndM
  2277.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2278.         IMPORT_CFM_FUNCTION TuneSetSoundLocalization
  2279.     ENDIF
  2280.  
  2281. ;
  2282. ; pascal ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
  2283. ;
  2284.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  2285.         Macro
  2286.         _TuneSetHeaderWithSize
  2287.             move.l              #$0008001C,-(sp)
  2288.             moveq               #0,D0
  2289.             dc.w                $A82A
  2290.         EndM
  2291.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  2292.         IMPORT_CFM_FUNCTION TuneSetHeaderWithSize
  2293.     ENDIF
  2294.  
  2295.  
  2296. ; typedef unsigned long                 MusicOpWord
  2297.  
  2298. ; typedef unsigned long *                MusicOpWordPtr
  2299.  
  2300. ;      QuickTime Music Track Event Formats:
  2301. ;
  2302. ;    At this time, QuickTime music tracks support 5 different event types -- REST events,
  2303. ;    short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2304. ;    long CONTROL events, and variable GENERAL events.
  2305. ;        • REST Event (4 bytes/event):
  2306. ;    
  2307. ;            (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2308. ;        
  2309. ;        • Short NOTE Events (4 bytes/event):
  2310. ;    
  2311. ;            (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2312. ;        
  2313. ;            where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2314. ;
  2315. ;        • Short CONTROL Events (4 bytes/event):
  2316. ;    
  2317. ;            (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2318. ;                                                                         ( or 15-bit Signed Value)
  2319. ;        • Short GENERAL Event (4 bytes/event):
  2320. ;    
  2321. ;            (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2322. ;    
  2323. ;        • Long NOTE Events (8 bytes/event):
  2324. ;    
  2325. ;            (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2326. ;            (1 0) (8-bit UNUSED) (22-bit Duration)
  2327. ;        
  2328. ;        • Long CONTROL Event (8 bytes/event):
  2329. ;        
  2330. ;            (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2331. ;            (1 0) (14-bit Controller) (16-bit Value LSB)
  2332. ;    
  2333. ;        • Long KNOB Event (8 bytes/event):
  2334. ;    
  2335. ;            (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2336. ;            (1 0) (14-bit KNOB) (16-bit Value LSB)
  2337. ;    
  2338. ;        • Variable GENERAL Length Events (N bytes/event):
  2339. ;    
  2340. ;            (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2341. ;                :
  2342. ;            (32-bit Data values)
  2343. ;                :
  2344. ;            (1 1) (14-bit UNUSED) (16-bit Length)
  2345. ;    
  2346. ;            where:    Length field is the number of LONG words in the record.
  2347. ;                    Lengths include the first and last long words (Minimum length = 2)
  2348. ;                
  2349. ;    The following event type values have not been used yet and are reserved for 
  2350. ;    future expansion:
  2351. ;        
  2352. ;        • (1 0 0 0)        (8 bytes/event)
  2353. ;        • (1 1 0 0)        (N bytes/event)
  2354. ;        • (1 1 0 1)        (N bytes/event)
  2355. ;        • (1 1 1 0)        (N bytes/event)
  2356. ;        
  2357. ;    For all events, the following generalizations apply:
  2358. ;    
  2359. ;        -    All duration values are specified in Millisecond units.
  2360. ;        -     Pitch values are intended to map directly to the MIDI key numbers.
  2361. ;        -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2362. ;            Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2363. ;            Key Pressure, and Channel Pressure).    
  2364. ;
  2365.  
  2366.  
  2367. ;  Defines for the implemented music event data fields
  2368.  
  2369. kRestEventType                    EQU        $00000000            ; lower 3-bits 
  2370. kNoteEventType                    EQU        $00000001            ; lower 3-bits 
  2371. kControlEventType                EQU        $00000002            ; lower 3-bits 
  2372. kMarkerEventType                EQU        $00000003            ; lower 3-bits 
  2373. kUndefined1EventType            EQU        $00000008            ; 4-bits 
  2374. kXNoteEventType                    EQU        $00000009            ; 4-bits 
  2375. kXControlEventType                EQU        $0000000A            ; 4-bits 
  2376. kKnobEventType                    EQU        $0000000B            ; 4-bits 
  2377. kUndefined2EventType            EQU        $0000000C            ; 4-bits 
  2378. kUndefined3EventType            EQU        $0000000D            ; 4-bits 
  2379. kUndefined4EventType            EQU        $0000000E            ; 4-bits 
  2380. kGeneralEventType                EQU        $0000000F            ; 4-bits 
  2381. kXEventLengthBits                EQU        $00000002            ; 2 bits: indicates 8-byte event record 
  2382. kGeneralEventLengthBits            EQU        $00000003            ; 2 bits: indicates variable length event record 
  2383. kEventLen                        EQU        1                    ; length of events in long words 
  2384. kXEventLen                        EQU        2
  2385. kRestEventLen                    EQU        1                    ; length of events in long words 
  2386. kNoteEventLen                    EQU        1
  2387. kControlEventLen                EQU        1
  2388. kMarkerEventLen                    EQU        1
  2389. kXNoteEventLen                    EQU        2
  2390. kXControlEventLen                EQU        2
  2391. kGeneralEventLen                EQU        2                    ; 2 or more, however 
  2392.                                                             ; Universal Event Defines
  2393. kEventLengthFieldPos            EQU        30                    ; by looking at these two bits of the 1st or last word              
  2394. kEventLengthFieldWidth            EQU        2                    ; of an event you can determine the event length                      
  2395.                                                             ; length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length 
  2396. kEventTypeFieldPos                EQU        29                    ; event type field for short events 
  2397. kEventTypeFieldWidth            EQU        3                    ; short type is 3 bits 
  2398. kXEventTypeFieldPos                EQU        28                    ; event type field for extended events 
  2399. kXEventTypeFieldWidth            EQU        4                    ; extended type is 4 bits 
  2400. kEventPartFieldPos                EQU        24
  2401. kEventPartFieldWidth            EQU        5
  2402. kXEventPartFieldPos                EQU        16                    ; in the 1st long word 
  2403. kXEventPartFieldWidth            EQU        12                    ; Rest Events
  2404. kRestEventDurationFieldPos        EQU        0
  2405. kRestEventDurationFieldWidth    EQU        24
  2406. kRestEventDurationMax            EQU        $00FFFFFF            ; Note Events
  2407. kNoteEventPitchFieldPos            EQU        18
  2408. kNoteEventPitchFieldWidth        EQU        6
  2409. kNoteEventPitchOffset            EQU        32                    ; add to value in pitch field to get actual pitch 
  2410. kNoteEventVolumeFieldPos        EQU        11
  2411. kNoteEventVolumeFieldWidth        EQU        7
  2412. kNoteEventVolumeOffset            EQU        0                    ; add to value in volume field to get actual volume 
  2413. kNoteEventDurationFieldPos        EQU        0
  2414. kNoteEventDurationFieldWidth    EQU        11
  2415. kNoteEventDurationMax            EQU        $000007FF
  2416. kXNoteEventPitchFieldPos        EQU        0                    ; in the 1st long word 
  2417. kXNoteEventPitchFieldWidth        EQU        16
  2418. kXNoteEventDurationFieldPos        EQU        0                    ; in the 2nd long word 
  2419. kXNoteEventDurationFieldWidth    EQU        22
  2420. kXNoteEventDurationMax            EQU        $003FFFFF
  2421. kXNoteEventVolumeFieldPos        EQU        22                    ; in the 2nd long word 
  2422. kXNoteEventVolumeFieldWidth        EQU        7                    ; Control Events
  2423. kControlEventControllerFieldPos    EQU        16
  2424. kControlEventControllerFieldWidth EQU    8
  2425. kControlEventValueFieldPos        EQU        0
  2426. kControlEventValueFieldWidth    EQU        16
  2427. kXControlEventControllerFieldPos EQU    0                    ; in the 2nd long word 
  2428. kXControlEventControllerFieldWidth EQU    16
  2429. kXControlEventValueFieldPos        EQU        0                    ; in the 1st long word 
  2430. kXControlEventValueFieldWidth    EQU        16                    ; Knob Events
  2431. kKnobEventValueHighFieldPos        EQU        0                    ; 1st long word 
  2432. kKnobEventValueHighFieldWidth    EQU        16
  2433. kKnobEventKnobFieldPos            EQU        16                    ; 2nd long word 
  2434. kKnobEventKnobFieldWidth        EQU        14
  2435. kKnobEventValueLowFieldPos        EQU        0                    ; 2nd long word 
  2436. kKnobEventValueLowFieldWidth    EQU        16                    ; Marker Events
  2437. kMarkerEventSubtypeFieldPos        EQU        16
  2438. kMarkerEventSubtypeFieldWidth    EQU        8
  2439. kMarkerEventValueFieldPos        EQU        0
  2440. kMarkerEventValueFieldWidth        EQU        16                    ; General Events
  2441. kGeneralEventSubtypeFieldPos    EQU        16                    ; in the last long word 
  2442. kGeneralEventSubtypeFieldWidth    EQU        14
  2443. kGeneralEventLengthFieldPos        EQU        0                    ; in the 1st & last long words 
  2444. kGeneralEventLengthFieldWidth    EQU        16
  2445.  
  2446.  
  2447. ;  General Event Defined Types
  2448.  
  2449. kGeneralEventNoteRequest        EQU        1                    ; Encapsulates NoteRequest data structure 
  2450. kGeneralEventPartKey            EQU        4
  2451. kGeneralEventTuneDifference        EQU        5                    ; Contains a standard sequence, with end marker, for the tune difference of a sequence piece (halts QuickTime 2.0 Music) 
  2452. kGeneralEventAtomicInstrument    EQU        6                    ; Encapsulates AtomicInstrument record 
  2453. kGeneralEventKnob                EQU        7                    ; knobID/knobValue pairs; smallest event is 4 longs 
  2454. kGeneralEventMIDIChannel        EQU        8                    ; used in tune header, one longword identifies the midi channel it originally came from 
  2455. kGeneralEventPartChange            EQU        9                    ; used in tune sequence, one longword identifies the tune part which can now take over this part's note channel (similar to program change) (halts QuickTime 2.0 Music)
  2456. kGeneralEventNoOp                EQU        10                    ; guaranteed to do nothing and be ignored. (halts QuickTime 2.0 Music) 
  2457. kGeneralEventUsedNotes            EQU        11                    ; four longwords specifying which midi notes are actually used, 0..127 msb to lsb 
  2458. ;  Marker Event Defined Types        // marker is 60 ee vv vv in hex, where e = event type, and v = value
  2459.  
  2460. kMarkerEventEnd                    EQU        0                    ; marker type 0 means: value 0 - stop, value != 0 - ignore
  2461. kMarkerEventBeat                EQU        1                    ; value 0 = single beat; anything else is 65536ths-of-a-beat (quarter note)
  2462. kMarkerEventTempo                EQU        2                    ; value same as beat marker, but indicates that a tempo event should be computed (based on where the next beat or tempo marker is) and emitted upon export
  2463.  
  2464.  
  2465. ;  UPP call backs 
  2466.  
  2467.  
  2468.     ENDIF ; __QUICKTIMEMUSIC__ 
  2469.  
  2470.